//
//  UserAccountViewModel.swift
//  微博09项目
//
//  Created by mac on 15/9/6.
//  Copyright © 2015年 itcast. All rights reserved.
//

import UIKit
/// 导入RAC的文件
import ReactiveCocoa

class UserAccountViewModel: NSObject {
   ///单例
    static let shareUserAccount = UserAccountViewModel()
    
    ///用户账户
     var userAccount:UserAccount?
    /// accessToken
    var accessToken:String?{
        return userAccount?.access_token
    }
   
    var avatarUrl: NSURL?  {
        return NSURL(string: userAccount?.avatar_large ?? "")
    }
    override init() {
        userAccount = UserAccount.LoadUserAccount()
    }
    
    /// 用户登录标记
    var userLogon:Bool{
        print(accessToken)
        return accessToken != nil
    }
    //MARK:- 加载网络数据
    /// 加载用户 accessToken & 用户信息
    
    func loadUserAccount(code:String) ->RACSignal {
        return RACSignal.createSignal({ (subscriber) -> RACDisposable! in
            //doNext是可以给信号增加附加操作，第一个信号完成之后，将第一个信号的result传递给第二个信号
            //doNext 后面一定要加一个subscriberXXX，否则 doNext 不会被执行到
            print(subscriber)
            NetworkTools.shareTools.loadAccessToken(code).doNext({ (result) -> Void in
                let account = UserAccount(dict: result as! [String:AnyObject])
                
                self.userAccount = account
               // printLog(account)
                
                NetworkTools.shareTools.loadUserInfo(account.uid!).subscribeNext({ (result) -> Void in
                    
                    let dict = result as! [String: AnyObject]
                    // 设置帐号的属性
                    account.name = dict["name"] as? String
                    account.avatar_large = dict["avatar_large"] as? String
                    
                 //   print("打印" + "\(account)")
                    // 保存账号
                    account.saveUserAccount()
                    
                    // 通知订阅者网络数据加载完成
                    subscriber.sendCompleted()
                    
                    }, error: { (error) -> Void in
                        subscriber.sendError(error)
                })
                
            }).subscribeError({ (error) -> Void in
                subscriber.sendError(error)
            })
            
            return nil
        })
    }
}
